import Request from 'luch-request'

import {
	login,
} from '@/api/index.js'
// const loginWithCode = async (code) => {
// 	let res = await login({
// 		'code': code
// 	})
// 	if (res?.code) {
// 		console.log(res.data);
// 		console.log(res.data.token.token);
// 		uni.setStorageSync('token', res.data.token.token)
// 	}
// }
const http = new Request()

http.setConfig(config => {
	/* config 为默认全局配置*/
	config.timeout = 100000
	config.baseURL = "https://order.weiet.com" /* 根域名 */
	// config.baseUrl = "http://192.168.10.104:80/v1" /* 根域名 */
	config.header = {
		...config.header,
	}
	config.custom = {
		auth: true, // 是否传token
		loading: true, // 是否使用loading
		...config.custom
	}

	return config
})


// function reLogin() {
// 	// 重新登录
// 	uni.login({
// 		success: (res) => {
// 			console.log('reLogin', res);
// 			loginWithCode(res.code)
// 		},
// 		fail: (err) => {
// 			console.log('需要重新登录');
// 			// uni.reLaunch({
// 			// 	url: '/pages/splash/index'
// 			// })
// 		}
// 	})

// }

// 请求响应器
http.interceptors.request.use(
	(config) => {
		const token = uni.getStorageSync('token') || '';

		// 添加加载事件,当loading等于true执行
		if (config?.custom?.loading) {
			uni.showLoading({
				title: '正在加载',
			})
		}

		// 全局默认的头信息（方便以后扩展）
		const defaultHeader = {
			'Content-Type': 'application/x-www-form-urlencoded',
		}
		// 判断是否存在 token 并且不在接口白单当中
		if (config?.custom?.auth) {
			if (!token) {
				if (config?.custom?.loading) {
					uni.hideLoading()
				}
				// reLogin()
				// return Promise.reject(config)
			}
			defaultHeader['api-token'] = token
		}
		defaultHeader['api-name'] = 'wechat'
		// 合并全局头信息和局部头信息（局部优先级高全局）
		config.header = {
			'Content-Type': 'multipart/form-data; charset=utf-8',
			...defaultHeader,
			...config.header,
		}

		return config
	},
	function(error) {
		return Promise.reject(error)
	}
)

// 响应拦截器
http.interceptors.response.use(
	(res) => {
		// 加载完成
		if (res.config?.custom?.loading) {
			uni.hideLoading()
		}
		if (res.statusCode >= 200 && res.statusCode < 300 && res.data.code > 0) {
			return res.data
		} else {
			uni.showToast({
				icon: 'none',
				title: res.data.info
			})
			return res.data
		}
	},
	(error) => {
		// 请求失败
		if (error.config?.custom?.loading) {
			uni.hideLoading()
		}
		// 后端约定 token 过期（失效）时，状态码值为 401
		// if (error.statusCode === 401) reLogin()
		if (error.data) {
			uni.showToast({
				title: error.data.error,
				icon: 'none'
			})
		}
		return Promise.reject(error)
	}
)


// 自定义验证器 详见 https://quanzhan.co/luch-request/guide/#validatestatus
http.validateStatus = statusCode => {
	return statusCode && statusCode >= 200 && statusCode < 300
}

const resetData = (data, url) => {
	return data ? data : {}
}
const POST = url => {
	return (body, other) => http.post(url, resetData(body, url), resetData(other, url))
}
const PUT = url => {
	return (body, other) => http.put(url, resetData(body, url), resetData(other, url))
}
const GET = url => {
	return (body, other) => http.get(url, {
		params: body
	}, resetData(other, url))
}
const DELETE = url => {
	return body => http.delete(url, body)
}
export {
	http,
	POST,
	PUT,
	GET,
	DELETE
}